package com.atguigu.e_classinmethod;
/*
    局部内部类只为所在的方法服务,在外界用不了 !

    1. 在局部内部类中访问外部类成员 :
        非静态方法内的局部内部类 :
            a. 不同名的成员 : 直接访问
            b. 同名的成员 : Outer.this.成员
        静态方法内的局部内部类 :
            创建外部类对象

    2. 在外部类中访问内部类成员 : 弄不了

    3. 在第三方类中创建外部类对象 访问内部类成员 : 弄不了

    4. 在第三方类中创建内部类对象 访问内部类成员 : 弄不了

 */
public class Demo {
    public static void main(String[] args) {

    }
}


class Outer{
    int num = 111;
    int numOut = 222;
    public void method(){
        System.out.println("外部类的method");
    }

    public void methodOut(){
        System.out.println("methodOut");
    }

    public void test(){
        //访问局部内部类的成员
        Object obj = classMethod(); //obj对象的本质是局部内部类Inner对象

        //向下转型肯定是转不了的 : 因为外部看不到Inner类型

        //多态有弊端 : 父引用不能访问子类的特有成员

    }

    public Object classMethod(){

        //局部位置
        class Inner{
            int num = 100;
            int numIn = 200;
            public void method(){
                System.out.println("内部类的method");
            }

            public void methodIn(){
                System.out.println("methodIn");
            }

            public void test(){
                //不同名 :
                System.out.println("numOut = " + numOut);
                methodOut();

                //同名 :
                System.out.println("num = " + Outer.this.num);
                Outer.this.method();
            }
        }

        //在方法内创建局部内部类对象
        Inner inner = new Inner();
        return inner;
    }
}